<?php
/**
 * 获取配置项帮助类(支持读取模块的配置文件，且模块配置文件优先于项目配置文件)
 * @param  string $fileName                  配置文件名称(不包含后缀名)
 * @param  $section                          配置模块名
 * @param  $item                             配置项名称
 * @param  $default                          当配置项不存在时的默认值
 * @param  $useCache                         是否读取缓存值
 * @return string|array                      错误抛出异常
 */
class Helper_Config {
	public static function get($fileName, $section = null, $item = null, $default = null, $useCache = false) {
		//一些配置文件项(例如默认数据库链接配置)可能在请求周期内多次被读取，文件io比较耗时，所以想只读取一次文件
		if ($useCache) {
			$registry = Zend_Registry::getInstance();
			$cacheKey = md5("configCache_" . $fileName . $section . $item . $default);
			if (Zend_Registry::isRegistered($cacheKey)) {
				return $registry[$cacheKey];
			}
		}

		$fileName = strtolower($fileName) . ".ini";
		$front = Zend_Controller_Front::getInstance();
		$moduleDirectory = $front->getModuleDirectory();
		$moduleConfigPath = $moduleDirectory . "/configs/" . APPLICATION_ENV . '/' . $fileName;

		if (file_exists($moduleConfigPath)) {
			$filePath = $moduleConfigPath;
		} else {
			$commonConfigDirectory = APPLICATION_PATH . "/configs/" . APPLICATION_ENV . '/';
			$filePath = $commonConfigDirectory . $fileName;
		}

		if (!file_exists($filePath)) {
			throw new Exception("未找到配置文件:" . $fileName);
		}
		try {
			$config = new Zend_Config_Ini($filePath, $section);
			if (!is_null($item)) {
				$config = $config->get($item, $default);
			}
			if ($config instanceof Zend_Config) {
				$config = $config->toArray();
			}

			if ($useCache) {
				$registry[$cacheKey] = $config;
			}
			return $config;
		} catch (Exception $e) {
			throw $e;
		}
	}
}